var localStorage = require('./kmc-localStorageFunction');//./js/kmc-localStorageFunction
var TalkingData = require('./TalkingData');
// 该代码仅用于开发时调试使用。上传代码时，因对象中有重复的key值，会导致在部分机型上页面空白。所以上传代码时，将变量注释
// var TdConstant = require('./kmc-td-constants')
var KmcCommonFunction = {

    // ===============================================================================
    // 函数功能:               每隔step位,向源字符串插入一个字符addChar
    // 传入参数:       srcStr:源字符串    addChar：插入字符   step: 间隔位数
    // ===============================================================================
    cutStr: function(srcStr,addChar,step)
    {
        if( !srcStr)
        {
            return "--";
        }
        else
        {
            var strArray=srcStr.split("");
            var newStr=new Array(srcStr.length+parseInt(srcStr.length/2));

            newStr[newStr.length-1]=strArray[strArray.length-1];

            var currentIndex=strArray.length-1;

            for(var i=newStr.length-1;i>=0;i--)
            {
                if((newStr.length-i)%3==0 && i != 0)
                {
                    newStr[i]=addChar;
                }
                else
                {
                    newStr[i]=strArray[currentIndex--];
                }
            }
            return newStr.join("");
        }

    },

    //判断一个数据是大于0，等于0，还是小于0
    compareWithZero: function(data){
        if(data<0){
            return -1;
        }else if(data==0){
            return 0;
        }else {
            return 1;
        }
    },

    /* =============================
        数组排序
        @param data 传入排序的数组
        @param order 排列的顺序
        @param field 按照此字段排序
    ================================*/
    sortTheList: function(data, order, field) {
        data.sort(function(a, b) {
            if (order === "desc") {
                if (a[field] > b[field]) {
                    return -1;
                } else if (a[field] < b[field]) {
                    return 1;
                } else {
                    return 0;
                }
            } else {
                if (a[field] < b[field]) {
                    return -1;
                } else if (a[field] > b[field]) {
                    return 1;
                } else {
                    return 0;
                }
            }
        });
        return data;
    },

    isJYPeriod: function(){
        var now = new Date();
        var h = now.getHours();
        var m = now.getMinutes();
        var s = now.getSeconds();

        // 9:05-12:15
        // 12:55-16:15
        if ((h === 9 && m > 4) || (h === 10)  || (h === 11) || (h === 12 && m < 16) || (h === 12 && m > 54) || (h === 13) || (h === 14) || (h === 15) ||  (h === 16 && m < 16)) {
            return true;
        }
        return false;
    },

    /*===================================================================
    函数功能:                数字型字符串千分位转换
    传入参数:               num：初始值 fixedPoint:截取小数点的位数
    ====================================================================*/
    formatNumber: function (num, fixedPoint) {
        if (num == undefined || isNaN(num) || num == null || num == "") {
            return "";
        }
        fixedPoint = fixedPoint == undefined || fixedPoint == null ? "" : fixedPoint;

        num = (typeof (num) == 'string') ? parseFloat(num) : num;

        if (fixedPoint != "") {

            return (num.toFixed(fixedPoint) + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
        }
        else {

            num += "";

            var point = num.indexOf(".");
            var len = num.length;

            //        数据为整型数          数据为浮点数
            var back = (point == -1) ? "" : num.slice(point - len);

            // 判断符号位
            var sign = num.slice(0, 1);

            point = (point == -1) ? len : point;

            // 为负数,从第二位数字进行千分位转换
            var front = (sign == "-") ? num.slice(1, point) : num.slice(0, point);

            sign = (sign == "-") ? sign : "";

            return sign + (front + '').replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,') + back;
        }

    },

    /**
     * 带参数的自定义事件埋点
     * @param eventId string 自定义事件ID，不要加空格或其他的转义字符
     * @param label string 一个事件的子分类
     * @param mapKv 事件的参数信息，描绘发生事件时的属性和场景。
     * mapKv中的Value 仅支持字符串（string）和数字（number）类型，每一次事件数据支持 10 对不同参数传入
     */
    onEventWithParameters: function (eventId, label, mapKv) {
        if (this.getIsTrack(eventId)) {
            TalkingData.onEventWithParameters(eventId, label, mapKv);
        }
    },

    /**
     *带label的自定义事件埋点
     * @param eventId string 自定义事件ID，不要加空格或其他的转义字符
     * @param label string 一个事件的子分类
     */
    onEventWithLabel: function (eventId, label) {
        if (this.getIsTrack(eventId)) {
            TalkingData.onEventWithLabel(eventId, label);
        }
    },

    /**
     *自定义事件埋点
     *
     * @param eventId string 自定义事件ID，不要加空格或其他的转义字符
     */
    onEvent: function (eventId) {
        if (this.getIsTrack(eventId)) {
            TalkingData.onEvent(eventId);
        }
    },

    /**
     * 页面埋点开始
     * @param pagename
     */
    onPageBegin: function (pagename) {
        if (this.getIsTrack(pagename)) {
            TalkingData.onPageBegin(pagename);
        }
    },


    /**
     * 页面埋点结束
     * @param pagename
     */
    onPageEnd: function (pagename) {
        if (this.getIsTrack(pagename)) {
            TalkingData.onPageEnd(pagename);
        }
    },

    /**
     * 判断埋点开关是否打开
     * @returns {boolean}
     */
    getIsTrack: function (param) {
        var isTrack = localStorage.getLocalData("isTrackData");
        if ((isTrack != null && isTrack == 'true') && param) {//打开
            return true;
        } else {
            return false;
        }
    },

    /**
     * 排序列表（同步angular的方法）
     * @param response 数据集
     * @param sort     排序类型 asc: 正序  desc: 倒序
     * @param field    排序字段
     */
    sortTheListPlus: function(array, sort, field, field2) {
        try {
            if (sort == "asc") {
                return array.sort(function(a, b) {
                    if (field2 && field2.length > 0) {
                        if (a[field] == b[field]) {
                            return a[field2] > b[field2] ? 1 : -1;
                        } else {
                            return a[field] > b[field] ? 1 : -1;
                        }
                    } else {
                        return a[field] > b[field] ? 1 : -1;
                    }
                });
            } else if (sort == "desc") {
                return array.sort(function(a, b) {
                    if (field2 && field2.length > 0) {
                        if (a[field] == b[field]) {
                            return a[field2] < b[field2] ? 1 : -1;
                        } else {
                            return a[field] < b[field] ? 1 : -1;
                        }
                    } else {
                        return a[field] < b[field] ? 1 : -1;
                    }
                });
            }
        } catch (error) {
            console.error("对列表数据进行排序时出现异常!", error);
        }
        return array;
    },


    /*
     * 计算小数点的位数
     */
    countPointLength: function (value) {
        if (value != null && value != '') {
            var decimalIndex = value.indexOf('.');
            if (decimalIndex == '-1') {
                return 0;
            } else {
                var decimalPart = value.substring(decimalIndex + 1, value.length);
                return decimalPart.length;
            }
        }
        return 0;
    },

    /**
     * 得到最小增量单位
     */
    getSmallCountUnit: function (price) {
        var smallUnit = "";
        var bits = this.countPointLength(price);
        if (bits == 0) {
            smallUnit = 1;
        } else {
            smallUnit = "0.";
            for (var i = 0; i < bits - 1; i++) {
                smallUnit = smallUnit + "0";
            }
            smallUnit = smallUnit + "1";
        }
        return smallUnit;
    },

    /**
     * 用特殊符号（如*）替换字符串中的除设定位之外的其他字符
     */
    changeStr: function(allstr, start, end, type) {
        if(!allstr){
            return;
        }
        if(!type){
            type = "•";
        }
        if(allstr.length<start){
            return allstr;
        }
        // 若end小于0，则表示结束位置为从结尾数的倒数第几位
        if (end < 0) {
            end = allstr.length - Math.abs(end);
        }
        return  allstr.split("").reduce(function(str, char, index){
            return str += (start-1 <= index && index <= end-1) ?  type : char;
        },"");
    }
};

module.exports = KmcCommonFunction;
